瀏覽器在讀取程式碼基本上都是從上到下讀取,在變數的寫法,會是這樣的結果。
console.log(a); //undefind
var a = 1;
console.log(a); //1
上方變數的撰寫跟讀取的結果,會是由上到下讀取,所以在第一行 console.log
因為找不到變數所以結果會是 undefind,第三個 console.log
因為有讀到第二行的變數,所以找到了 a 的值為1。
加入一個 function,先看程式碼:
console.log(a); //undefind
var a = 1;
console.log(a); //1
count();//會得到什麼?
function count(){
console.log('hello!');
}
count 結果會是:
count();// hello!
function count(){
console.log('hello!');
}
function 有一個 Hoisting 的向上提升的概念,就是瀏覽器會先把 function 設定為優先讀取,在瀏覽器的讀取順序會變成這樣:
function count(){
console.log('hello!');
}
count();// hello!
故在執行 function 的時候,function 名稱寫在上面或下面是沒有差的,但為了讓自己習慣所有程式碼都遵循由上到下讀取的方式,我還是會寫成剛上方一樣的方式,維持一個習慣寫法,也比較不會讓自己搞混!
Hositing 就是將變數&函數提升到所有程式碼最前面,然後先存進記憶體中,後面在做賦值等動作。由此可知 Hositing 主要跟記憶體有關係,而 Hositing 只是一個觀念。
文章參考:
https://hsiangfeng.github.io/javascript/20190419/3635730318/
https://developer.mozilla.org/zh-TW/docs/Glossary/Hoisting